// 实现括号匹配通常使用栈这种数据结构
// 当遇到一个右括号时，需要检查它是否能和栈顶的左括号匹配


function isMatchingPair(left, right) {
  if (left === '(' && right === ')') return true;
  if (left === '[' && right === ']') return true;
  if (left === '{' && right === '}') return true;
  return false;
}

function isBalanced(expression) {
  const stack = [];

  for (let i = 0; i < expression.length; i++) {
    const char = expression[i];
    if (char === '(' || char === '[' || char === '{') {
      // 如果是左括号，将其压入栈中
      stack.push(char);
    } else if (char === ')' || char === ']' || char === '}') {
      if (stack.length === 0) {
        // 如果栈为空，说明没有对应的左括号，不匹配
        return false;
      }
      const top = stack.pop();
      if (!isMatchingPair(top, char)) {
        // 如果栈顶的左括号和当前右括号不匹配
        return false;
      }
    }
  }

  // 遍历完字符串后，如果栈为空，说明所有括号都匹配
  return stack.length === 0;
}


console.log(isBalanced("()"));      // true
console.log(isBalanced("()[]{}"));  // true
console.log(isBalanced("(]"));      // false
console.log(isBalanced("([)]"));    // false
console.log(isBalanced("{[]}"));    // true
console.log(isBalanced(""));        // true 

